"""
提示词模板库
提供常见任务的提示词模板，支持按领域分类和推荐
"""

from typing import List, Dict, Any
import re

class PromptTemplateLibrary:
    """
    提示词模板库
    支持按领域分类的提示词模板管理和推荐
    """
    
    def __init__(self):
        """初始化提示词模板库"""
        self.templates = {
            "code_generation": {
                "name": "代码生成模板",
                "templates": [
                    {
                        "id": "code_gen_1",
                        "name": "通用代码生成模板",
                        "template": """你是一位编程专家，请根据以下要求编写代码：
                        1. 功能需求：{功能描述}
                        2. 技术要求：
                           - 编程语言：{编程语言}
                           - 使用{算法/框架}实现
                           - 添加适当的注释说明逻辑
                        3. 输出要求：
                           - 提供完整的可执行代码
                           - 遵循{代码规范}规范
                           - 包含简单的测试用例
                        4. 示例：
                           {示例输入输出}""",
                        "keywords": ["编程", "代码", "开发", "coding", "development"],
                        "domain": "通用"
                    },
                    {
                        "id": "code_gen_2",
                        "name": "Python数据处理模板",
                        "template": """你是一位Python数据科学专家，请根据以下要求编写数据处理代码：
                        1. 数据处理目标：{处理目标}
                        2. 技术要求：
                           - 使用pandas进行数据处理
                           - 使用numpy进行数值计算
                           - 使用matplotlib/seaborn进行可视化
                           - 添加详细的数据处理注释
                        3. 输出要求：
                           - 提供完整的数据处理脚本
                           - 包含数据加载、清洗、分析和可视化
                           - 添加结果解释
                        4. 示例数据格式：
                           {示例数据}""",
                        "keywords": ["python", "数据处理", "pandas", "数据分析", "data processing"],
                        "domain": "技术"
                    }
                ]
            },
            "data_analysis": {
                "name": "数据分析模板",
                "templates": [
                    {
                        "id": "data_analysis_1",
                        "name": "通用数据分析模板",
                        "template": """你是一位数据分析专家，请根据以下要求进行数据分析：
                        1. 分析目标：{分析目标}
                        2. 数据描述：{数据描述}
                        3. 分析要求：
                           - 描述性统计分析
                           - 可视化展示关键指标
                           - 发现数据中的模式和趋势
                           - 提供业务洞察
                        4. 输出要求：
                           - 结构化分析报告
                           - 图表和数据支持
                           - 可行的业务建议""",
                        "keywords": ["数据分析", "统计", "分析报告", "data analysis", "statistics"],
                        "domain": "通用"
                    },
                    {
                        "id": "data_analysis_2",
                        "name": "机器学习分析模板",
                        "template": """你是一位机器学习专家，请根据以下要求进行机器学习分析：
                        1. 任务类型：{任务类型}（分类/回归/聚类）
                        2. 数据特征：{数据特征描述}
                        3. 分析要求：
                           - 推荐合适的算法
                           - 提供模型训练和评估指导
                           - 解释模型结果含义
                           - 给出模型优化建议
                        4. 输出要求：
                           - 完整的机器学习流程
                           - 代码实现和参数调优
                           - 模型性能评估""",
                        "keywords": ["机器学习", "ml", "算法", "模型", "machine learning"],
                        "domain": "技术"
                    }
                ]
            },
            "content_writing": {
                "name": "内容写作模板",
                "templates": [
                    {
                        "id": "content_writing_1",
                        "name": "技术文档写作模板",
                        "template": """你是一位技术文档编写专家，请根据以下要求编写技术文档：
                        1. 文档类型：{文档类型}
                        2. 目标读者：{目标读者}
                        3. 内容要求：
                           - 清晰的结构和章节划分
                           - 准确的技术描述
                           - 适当的示例和图示
                           - 易于理解和操作的说明
                        4. 格式要求：
                           - 遵循{文档规范}
                           - 使用专业但易懂的语言
                           - 包含常见问题解答""",
                        "keywords": ["技术文档", "文档写作", "technical writing", "documentation"],
                        "domain": "技术"
                    },
                    {
                        "id": "content_writing_2",
                        "name": "教育内容写作模板",
                        "template": """你是一位教育内容专家，请根据以下要求编写教育材料：
                        1. 教学主题：{教学主题}
                        2. 目标学习者：{学习者特征}
                        3. 内容要求：
                           - 循序渐进的知识点介绍
                           - 丰富的示例和练习
                           - 互动性元素设计
                           - 学习效果评估方法
                        4. 格式要求：
                           - 采用易于理解的语言
                           - 结构清晰，重点突出
                           - 包含总结和复习要点""",
                        "keywords": ["教育", "教学", "学习", "education", "teaching"],
                        "domain": "教育"
                    }
                ]
            },
            "healthcare": {
                "name": "医疗健康模板",
                "templates": [
                    {
                        "id": "healthcare_1",
                        "name": "医疗诊断辅助模板",
                        "template": """你是一位医疗专家AI助手，请根据以下要求提供诊断辅助：
                        1. 症状描述：{症状描述}
                        2. 患者信息：{患者基本信息}
                        3. 辅助要求：
                           - 基于症状的可能诊断
                           - 建议的检查项目
                           - 初步处理建议
                           - 转诊指征
                        4. 注意事项：
                           - 严格遵循医疗规范
                           - 使用专业医学术语
                           - 强调需要专业医生确认
                           - 提供循证医学依据""",
                        "keywords": ["医疗", "诊断", "healthcare", "medical", "diagnosis"],
                        "domain": "医疗"
                    }
                ]
            },
            "legal": {
                "name": "法律咨询模板",
                "templates": [
                    {
                        "id": "legal_1",
                        "name": "法律咨询模板",
                        "template": """你是一位法律专家，请根据以下要求提供法律咨询：
                        1. 法律问题：{法律问题描述}
                        2. 相关背景：{案件背景}
                        3. 咨询要求：
                           - 适用的法律法规
                           - 法律关系分析
                           - 权利义务说明
                           - 解决方案建议
                        4. 注意事项：
                           - 严格引用法律条文
                           - 使用正式法律语言
                           - 强调需要专业律师代理
                           - 说明法律风险""",
                        "keywords": ["法律", "法规", "咨询", "law", "legal"],
                        "domain": "法律"
                    }
                ]
            }
        }
    
    def get_all_templates(self) -> Dict[str, Any]:
        """
        获取所有模板
        
        Returns:
            所有模板的字典
        """
        return self.templates
    
    def get_templates_by_category(self, category: str) -> List[Dict[str, Any]]:
        """
        根据类别获取模板
        
        Args:
            category: 模板类别
            
        Returns:
            指定类别的模板列表
        """
        category_data = self.templates.get(category, {})
        return category_data.get("templates", [])
    
    def get_template_by_id(self, template_id: str) -> Dict[str, Any]:
        """
        根据ID获取模板
        
        Args:
            template_id: 模板ID
            
        Returns:
            指定ID的模板
        """
        for category, category_data in self.templates.items():
            for template in category_data.get("templates", []):
                if template.get("id") == template_id:
                    return template
        return {}
    
    def recommend_templates(self, requirement: str) -> List[str]:
        """
        根据需求推荐模板
        
        Args:
            requirement: 用户需求描述
            
        Returns:
            推荐的模板ID列表
        """
        recommended = []
        requirement_lower = requirement.lower()
        
        # 遍历所有模板，基于关键词匹配推荐
        for category, category_data in self.templates.items():
            for template in category_data.get("templates", []):
                keywords = template.get("keywords", [])
                # 检查需求中是否包含模板关键词
                if any(keyword.lower() in requirement_lower for keyword in keywords):
                    recommended.append(template["id"])
        
        return recommended
    
    def get_domain_templates(self, domain: str) -> List[Dict[str, Any]]:
        """
        根据领域获取模板
        
        Args:
            domain: 领域名称
            
        Returns:
            指定领域的模板列表
        """
        domain_templates = []
        domain_lower = domain.lower()
        
        for category, category_data in self.templates.items():
            for template in category_data.get("templates", []):
                template_domain = template.get("domain", "").lower()
                if template_domain == domain_lower or domain_lower == "通用":
                    domain_templates.append(template)
        
        return domain_templates


def get_prompt_template_library() -> PromptTemplateLibrary:
    """
    获取提示词模板库实例
    
    Returns:
        PromptTemplateLibrary: 提示词模板库实例
    """
    return PromptTemplateLibrary()


# 导出类和函数
__all__ = [
    'PromptTemplateLibrary',
    'get_prompt_template_library'
]